package com.atguigu.mybatisplus.common.utils;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.nio.charset.StandardCharsets;
import java.util.Date;

public class JwtTokenUtils {
    private static final long JWT_TTL = 1000L * 60 * 60 * 24 * 24; // 有效期24天

    private static final String SECRET_KEY = "your-256-bit-secret-key-here-1234567890"; // 密钥


    public static String createJWTToken(String username,String password) {
        // 签名算法
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

        // 计算JWT过期时间对应的时间戳
        long expMillis = System.currentTimeMillis() + JWT_TTL;
        Date exp = new Date(expMillis);

        // 生成JWT
        String jwt = Jwts.builder()
                .setSubject(username)//用户名
                .setSubject(password)//密码
                .setIssuedAt(new Date())    //签发时间
                .setExpiration(exp)         //过期时间
                .signWith(signatureAlgorithm, SECRET_KEY.getBytes(StandardCharsets.UTF_8))       //签名算法
                .compact();
        return jwt;
    }

    /**
     * 解析JWT
     *
     * @param jwt
     * @return
     */
    public static String parseJWTToken(String jwt) {
        // 解析JWT
        String subject = Jwts.parserBuilder()
                .setSigningKey(SECRET_KEY.getBytes(StandardCharsets.UTF_8)) //设置签名密钥
                .build()
                .parseClaimsJws(jwt)    //解析并验证JWT
                .getBody()
                .getSubject();
        return subject;
    }
}
